{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DoF on Edges in Two Dimensions\n",
    "\n",
    "We describe general idea of the data structures generated in subroutine \n",
    "`dofedge` for two dimensional triangular grids. We refer to [Simplicial Complex in Two Dimensions](../mesh/sc.html) for the discussion of ordering and orientation of edges."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`[elem2edge,edge,elem2edgeSign,edgeSign] = dofedge(elem)` constructs data structure for finite elements associated to edges including CR nonconforming element, Ravairt-Thomas element, and Nedelec element etc.\n",
    " \n",
    "In the output\n",
    "\n",
    "-`elem2edge`: the elementwise pointer from `elem` to `edge`. In each triangle, the opposite indexing is used for its three edges, e.g., `elem2edge(t,1)` is the global index of the first edge consisting of vertices `[2 3]` of triangle `t`.\n",
    " \n",
    "-`edge`: the edge matrix is sorted s.t. `edge(:,1)<edge(:,2)`. The orientation of edge is induced by the ascend ordering of vertices.\n",
    " \n",
    "-`elem2edgeSign`: records the consistency of the local edge `locEdge = [2 3; 3 1; 1 2]` and the global edge orientation. \n",
    "\n",
    "  `elem2edgeSign = -1` if the local edge orientation is inconsistent with the global one, i.e. `elem(:,locEdge(:,1)) > elem(:,locEdge(:,2))`. \n",
    "  \n",
    "  When both `elem` and local edges are ascend ordered (i.e. `locEdge = [2 3; 1 3; 1 2]` and `elem(:,1)<elem(:,2)<elem(:,3)` ), `elem2edgeSign = [1 1 1]`. In this case, no need to use `elem2edgeSign`. \n",
    "  \n",
    "  When `elem` is the ascend ordering and `locEdge = [2 3; 3 1; 1 2]` is the induced ordering, then `elem2edgeSign = [1 -1 1]`, i.e., only the 2nd edge `[3 1]` is inconsistent. In this case, the pattern is also known and no need to call `dofedge`.\n",
    " \n",
    "-`edgeSign`: As the lcoal edge is the induced ordering, one interior edge will be shared by two triangles with opposite orientation. `edgeSign = 1` if the edge is consistent with the local edge of its first element, equals `-1` otherwise. \n",
    "\n",
    "See also `dof3edge`, `dof3face`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "elem =\n",
      "\n",
      "     4     5     1\n",
      "     5     6     2\n",
      "     7     8     4\n",
      "     8     9     5\n",
      "     2     1     5\n",
      "     3     2     6\n",
      "     5     4     8\n",
      "     6     5     9\n",
      "\n",
      "\n",
      "elem2edge =\n",
      "\n",
      "  8�3 uint32 matrix\n",
      "\n",
      "    3    2    8\n",
      "    6    5   11\n",
      "   10    9   15\n",
      "   13   12   16\n",
      "    3    5    1\n",
      "    6    7    4\n",
      "   10   12    8\n",
      "   13   14   11\n",
      "\n",
      "\n",
      "edge =\n",
      "\n",
      "  16�2 uint32 matrix\n",
      "\n",
      "   1   2\n",
      "   1   4\n",
      "   1   5\n",
      "   2   3\n",
      "   2   5\n",
      "   2   6\n",
      "   3   6\n",
      "   4   5\n",
      "   4   7\n",
      "   4   8\n",
      "   5   6\n",
      "   5   8\n",
      "   5   9\n",
      "   6   9\n",
      "   7   8\n",
      "   8   9\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA\nB3RJTUUH5QkJACM3/FHfBAAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJ\nbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAwOC1TZXAtMjAyMSAxNzozNTo1NXrM3+oAACAA\nSURBVHic7J15eFNV+se/6UoLDYFSpEvoRaBAW7WALK1Kg7iAgDKCBdwIKjI6KmU6jts4bcefOo5W\n6ziOA7Kk7lTUKqgFFVLElJ2KtAUEuZAu0I00pene/v64NaRZbtOS7ea+n8dnnuTc03De+Sbv997z\nnnOvpKurCwRBEAThbnzcPQCCIAiCAMiQCIIgCA+BDIkgCILwCMiQCIIgCI+ADIkgCILwCMiQCIIg\nCI+ADIkgCILwCMiQCIIgCI+ADIkgCILwCMiQCIIgCI+ADIkgCILwCMiQCIIgCI+ADIkgCILwCMiQ\nCIIgCI+ADIkgCILwCMiQCIIgCI+ADIkgCILwCMiQCIIgCI+ADIkgCILwCMiQCIIgCI+ADIkgCILw\nCPzcPQBCFKjVapZlGYZRKBTuHgvhIkh0oq+QIRHOgmXZnJwctVqtVqsBhMrCa3WVDMNwGSo5OZny\nlPdBohOXg6Srq8vdYyAAoKGh4e233z548GBVVdXo0aPvuuuuOXPmuHtQ/SQzMzMjIwNAqCw8VBYR\nw0xOSpgXKouo1VWcYA8dZw8UFm0FwDCMUqlMT09383Ddx44dO3744QeNRjNs2LAZM2Y8/PDDgYGB\n7h5UPyHRe6WysnLt2rUHDx7s6uq6/vrrb7nllokTJ7p7UJ4FGZJHUFJSMmfOnLNnz5o23nnnnbm5\nub6+vu4aVf9Yvnz5lrxtiQnzxzGTY5jJVvvU6ioAaIq2FhZteTx1pTjTU1pa2uuvv27aEhcX99NP\nPw0ePNhdQ+o3JHqvfP/990uWLKmtrTW2+Pj4vPfee/fcc48bR+Vp+HInNYQb6ezsvP3220tKSgAM\nGDAgPj7+/PnzAEpLS6VSaVJSkrsH2Ae4xKRckJGUMD9UFmGrW/CAkOABIeOYyQnjFdn/y2hquSi2\nmZxXXnnlhRdeABAREZGSklJTU6PX66urq+vq6ubPn+/u0fUNEr1X6uvrZ82aVV1dDWD06NHjx48v\n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\n5gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "% Generate edge and elem2dof\n",
    "[node,elem] = squaremesh([0,1,0,1],1/2);\n",
    "T = auxstructure(elem);\n",
    "elem2edge = T.elem2edge;\n",
    "edge = T.edge;\n",
    "edge2elem = T.edge2elem;\n",
    "\n",
    "showmesh(node,elem);\n",
    "findnode(node,'all');\n",
    "findelem(node,elem,'all');\n",
    "findedge(node,edge,'all','vec');\n",
    "\n",
    "display(elem);\n",
    "display(elem2edge);\n",
    "display(edge);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "elem2edgeSign =\n",
      "\n",
      "    -1     1     1\n",
      "    -1     1     1\n",
      "    -1     1     1\n",
      "    -1     1     1\n",
      "     1    -1    -1\n",
      "     1    -1    -1\n",
      "     1    -1    -1\n",
      "     1    -1    -1\n",
      "\n"
     ]
    }
   ],
   "source": [
    "NT = size(elem,1); NE = size(edge,1);\n",
    "elem2edgeSign = ones(NT,3);\n",
    "totalEdge = uint32([elem(:,[2,3]); elem(:,[3,1]); elem(:,[1,2])]);\n",
    "idx = (totalEdge(:,1)>totalEdge(:,2));\n",
    "elem2edgeSign(idx) = -1;\n",
    "\n",
    "display(elem2edgeSign);"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Matlab",
   "language": "matlab",
   "name": "matlab"
  },
  "language_info": {
   "codemirror_mode": "octave",
   "file_extension": ".m",
   "help_links": [
    {
     "text": "MetaKernel Magics",
     "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md"
    }
   ],
   "mimetype": "text/x-matlab",
   "name": "matlab",
   "version": "0.14.3"
  },
  "toc": {
   "colors": {
    "hover_highlight": "#DAA520",
    "navigate_num": "#000000",
    "navigate_text": "#333333",
    "running_highlight": "#FF0000",
    "selected_highlight": "#FFD700",
    "sidebar_border": "#EEEEEE",
    "wrapper_background": "#FFFFFF"
   },
   "moveMenuLeft": true,
   "nav_menu": {
    "height": "48px",
    "width": "252px"
   },
   "navigate_menu": true,
   "number_sections": true,
   "sideBar": true,
   "threshold": 4,
   "toc_cell": false,
   "toc_section_display": "block",
   "toc_window_display": false,
   "widenNotebook": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
